package ru.chezclif.lern.conread;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import ru.chezclif.lern.conread.parser.PathDataInputProperties;

/**
 * Сохранение настроек из хранилища данных в properties файл
 * 
 * @author Vit
 * 
 */
public class PropertySaver implements PathDataInputProperties {

	@Override
	/**
	 * По параметру filePath находится\создается файл, в него записываются все настройки и комментарии
	 * 
	 *@param filePath полный путь к оперируемому файлу
	 *@param propertyBuffer хранилище данных с настройками для записи в файл
	 */
	public void parseFile(String filePath, DataBuffer propertyBuffer) {
		Preconditions.notBlank(filePath);
		Preconditions.notNull(filePath);
		Preconditions.notNull(propertyBuffer);
		File propertyFile = new File(filePath);
		try {
			if (!propertyFile.exists()) {
				propertyFile.createNewFile();
			}
			FileWriter fileWriter= new FileWriter(propertyFile);
			BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
			List<PropertyElements> listOfElements = propertyBuffer.getElements();
			Properties propertyObject = new Properties();//Объект для записи настроек из хранилища данных в файлы типа .properies
			for (PropertyElements singleElement : listOfElements) {
				propertyObject.setProperty(singleElement.getKey(), singleElement.getValue());
			}
			propertyObject.store(bufferedWriter, propertyBuffer.getHeaderComment());
			bufferedWriter.write("#" + propertyBuffer.getFooterComment());
			bufferedWriter.close();
		} catch (IOException e) {
			throw new ru.chezclif.lern.conread.exceptions.FileNotFoundException(e, filePath);
		}
	}
}
